package com.cvicse.scm.test;

import java.net.SocketException;
import java.util.List;

import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;

import com.cvicse.subversion.client.SCMClient;

import comm.IRepository;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends Plugin {

	// The plug-in ID
	public static final String PLUGIN_ID = "com.cvicse.scm.test";

	// The shared instance
	private static Activator plugin;
	
	private ServiceTracker scmClientServiceTracker = null;
	
	public static SCMClient scmClient = null;
	
	/**
	 * The constructor
	 */
	public Activator() {
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
		super.start(context);
		plugin = this;
		
		scmClientServiceTracker = new SCMClientServiceTracker(context);
		scmClientServiceTracker.open();
		
		List<IRepository> list = scmClient.getRepositoryList(true);
		for (IRepository repository : list) {
			System.out.println(repository.getName());
		}
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
		plugin = null;
		super.stop(context);
	}

	/**
	 * Returns the shared instance
	 *
	 * @return the shared instance
	 */
	public static Activator getDefault() {
		return plugin;
	}
	
	public class SCMClientServiceTracker extends ServiceTracker {

		public SCMClientServiceTracker(BundleContext context) {
			super(context, SCMClient.class.getName(), null);
		}

		@Override
		public Object addingService(ServiceReference reference) {
			System.out.println("���SVNControl �ͻ���...");
			scmClient = (SCMClient) context.getService(reference);
			return scmClient;
		}
		
		@Override
		public void removedService(ServiceReference reference, Object service) {
			try {
				System.out.println("�رտͻ���l��....");
				scmClient.logout();
				scmClient = null;
			} catch (SocketException e) {
				e.printStackTrace();
			}
		}

	}


}
